import pkuseg
import re

def remove_spaces_between_symbols(input_string):
    # 使用正则表达式匹配空格两侧都是字母、{、}、#、[、]的情况
    pattern = r'(?<=[a-zA-Z0-9{}#\[\]\\/=\.])\s(?=[a-zA-Z0-9{}#\[\]\\/=\.])'
    # 替换匹配到的空格
    result = re.sub(pattern, '', input_string)
    return result

def remove_spaces_before_letters(text):
    """
    移除文本中英文字母前的空格。
    """

    
    # 使用正则表达式匹配英文字母 } ] #前的空格，并将其替换为空字符串
    return re.sub(r'\s+([a-zA-Z\}\]#])', r'\1', text)

##  使用pkuseg去自动分析词性
def pkuseg_chapter():
    for i in range(1, 81):
        pku_segchap(i)

def pku_segchap(no):
    number_str = f"{no:02d}"
    # 在这里处理number_str变量，比如打印它或其他操作
    print(number_str)
    # 对input.txt的文件分词输出到output.txt中
    # 开20个进程
    start = r'D:\code\HongLouMeng-ZhiPingBen\tex_src\book\TeX_files'+r"\chapter" + number_str +".tex"
    cache_file = r'D:\code\HongLouMeng-ZhiPingBen\tex_src\book\cache'+r"\cache" + number_str + "_seg.tex"
    pkuseg.test(start, cache_file , nthread=1)     

    output_file = r'D:\code\HongLouMeng-ZhiPingBen\tex_src\book\seg'+r"\chapter" + number_str + "_seg.tex"

    # 读取输入文件
    with open(cache_file, 'r', encoding='utf-8') as file:
        lines = file.readlines()

    # 处理每一行
    processed_lines = [remove_spaces_between_symbols(line) for line in lines]

    # 保存处理后的结果到新文件
    with open(output_file, 'w', encoding='utf-8') as file:
        file.writelines(processed_lines)

    print(f"Processed file saved to {output_file}")
### 自动增加latex头部和尾部
def add_header_tailer(filename, number):
    latex_preamble = [
        r'\documentclass{book} % 文档 类别 : article , report , book , letter , 等等',
        r'\usepackage{ctex}',
        r'\usepackage{amsmath}',
        r'\usepackage{tikz}',
        r'\usepackage{listings}',
        r'\usepackage{titlesec}',
        r'\usepackage{etoolbox}',
        r'\usepackage{varwidth} %% 提供 varwidth 环境',
        r'\usepackage[titles]{tocloft}',
        r'\usepackage{fancyhdr} % 用于 自定义 页眉 和 页 脚',
        r'\usepackage{lipsum} % 生成 示例 文本',
        r'\usetikzlibrary{intersections}',
        r'\usetikzlibrary{calc}',
        r'\setlength{\cftchapnumwidth}{8\ccwd}',
        r'\title{ 刘 徽割 圆术 将 π 的 求解 转为 开方 公式 }',
        r'\author{ 朱正路 }',
        r'\date{\today} % 使用 当前 日期 ， 也 可以 指定 特定 日期',
        '',
        r'% 设置 listings 的 样式 ， 去掉 语法 高亮',
        r'\lstset{',
        r'language = Python ,',
        r'basicstyle=\ttfamily , % 使用 等 宽字体',
        r'backgroundcolor = \color{white} , % 背景 色设 为 白色 ， 去除 阴影 效果',
        r'keywordstyle = \relax , % 关闭 关键 字 高亮',
        r'commentstyle = \relax , % 关闭 注释 高亮',
        r'stringstyle = \relax , % 关闭 字符串 高亮',
        r'showstringspaces=false , % 不 在 字符串 中 显示 空格',
        r'numbers=none , % 不 显示 行号',
        r'breaklines = true , % 允许 折行',
        r'breakatwhitespace=true , % 在 空白处 折行',
        r'tabsize = 4 , % 设置 tab 宽度',
        r'}',
        r'% 自定义 章节 标题',
        r'\titleformat{\chapter}[display]',
        r'{\centering\fontsize{24}{28}\bfseries} % 居中 对 齐 ， 加粗',
        f'{{第 {number}  回}} % 显示 为 " 第n 回 "', 
        r'{1em} % 分隔 符 与 标题 之间 的 距离',
        r'{ ~ } % 显示 为 " 第n 回 "', 
        r'[\vspace{1em}] % 在 标题 后 增加 一些 垂直 空间',
        r'\patchcmd{\chapter}{\thechapter}{第 \thechapter 回}{}{}',
        r'% 重置 页眉 和 页 脚',
        r'\pagestyle{fancy}',
        r'',
        r'% 定义 页眉 内容',
        r'\fancyhf{} % 清空 页眉 和 页 脚',
        r'\fancyhead[L]{\thepage}',
        f'\\fancyhead[R]{{第 {number} 回 }} % 显示 章节 标题',
        r'% 设置 章节 名称 在 页眉 中 显示',
        r'\renewcommand{\chaptermark}[1]{\markboth{#1}{}}',
        r'\renewcommand{\sectionmark}[1]{\markright{#1}}',
        r'\begin{document}',
    ]

    ##filename = 'your_document.tex'


    # 读取原有文件内容
    with open(filename, 'r', encoding='utf-8') as file:
        content = file.read()

    # 创建新的内容，包含preamble和原有内容
    new_content = '\n'.join(latex_preamble) + '\n\n' + content

    # 写回到文件
    with open(filename, 'w', encoding='utf-8') as file:
        file.write(new_content)

    with open(filename, 'r+', encoding='utf-8') as file:
        content = file.read()
        # 移动文件指针到文件结尾
        file.seek(0, 2)
        # 检查文件是否已结束
        if not content.endswith(r'\end{document}\n'):
            # 如果没有结束标签，则追加
            if not content.endswith('\n'):
                file.write('\n')
            file.write(r'\end{document}\n')


def add_all_header_tail():
    for i in range(1, 81):
        number_str = f"{i:02d}"
        # 在这里处理number_str变量，比如打印它或其他操作
        print(number_str)  

        output_file = r'D:\code\HongLouMeng-ZhiPingBen\tex_src\book\seg'+r"\chapter" + number_str + "_seg.tex"
        #print(f"read file seq: {number_str}")
        add_header_tailer(output_file, i)

### 自动分析词性
#pkuseg_chapter()
### 自动添加texstudio所需要的标题和结尾
#add_all_header_tail()

for i in range(3, 81):
    pku_segchap(i)
    number_str = f"{i:02d}"
    # 在这里处理number_str变量，比如打印它或其他操作
    print(number_str)  

    output_file = r'D:\code\HongLouMeng-ZhiPingBen\tex_src\book\seg'+r"\chapter" + number_str + "_seg.tex"
    #print(f"read file seq: {number_str}")
    add_header_tailer(output_file, i)   